package com.sites.common.kit;

import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;

/**
 * JSON 数组转换工具类（主要用于栏目数据树）
 *
 * @author zyg
 * @date 2025/8/25 21:13
 */
public class JsonChildrenConverterHutool {

    public static JSONArray convertChildren(String jsonString) {
        // 解析原始 JSON 数组
        JSONArray originalArray = JSONUtil.parseArray(jsonString);
        JSONArray newArray = new JSONArray();

        // 处理每个对象
        for (Object item : originalArray) {
            if (item instanceof JSONObject) {
                newArray.add(processObject((JSONObject) item));
            } else {
                newArray.add(item);
            }
        }

        return newArray;
    }

    private static JSONObject processObject(JSONObject obj) {
        JSONObject newObj = new JSONObject();

        // 复制所有属性
        for (String key : obj.keySet()) {
            Object value = obj.get(key);

            if ("children".equals(key) && value instanceof String) {
                try {
                    // 尝试将字符串解析为 JSON 数组
                    JSONArray childrenArray = JSONUtil.parseArray((String) value);
                    JSONArray processedChildren = new JSONArray();

                    // 递归处理子数组中的对象
                    for (Object child : childrenArray) {
                        if (child instanceof JSONObject) {
                            processedChildren.add(processObject((JSONObject) child));
                        } else {
                            processedChildren.add(child);
                        }
                    }

                    newObj.put(key, processedChildren);
                } catch (Exception e) {
                    // 解析失败，保留原始字符串值
                    newObj.put(key, value);
                }
            } else {
                newObj.put(key, value);
            }
        }

        return newObj;
    }
}
